﻿using System;
using System.Collections.Generic;
using System.Data;
using App_Code.Conexao;
using App_Code.Interface;
using App_Code.Vo;
using FluorineFx;
namespace App_Code.Retaguarda.BD
{
    [RemotingService]
    public class UsuarioBD: BdAbstrato<Usuario>
    {
        public UsuarioBD(ConfiguradorConexao configurador): base(configurador)
        {
        }

        public override void Adicionar(Usuario usuario)
        {
            ComandoSql("[dbo].[ins_TBL_Usuario]", CommandType.StoredProcedure);
            MontarParametros(usuario);
            ExecutarComando();
        }

        public override void Atualizar(Usuario usuario)
        {
            ComandoSql("[dbo].[atu_TBL_Usuario]", CommandType.StoredProcedure);
            MontarParametros(usuario);
            ExecutarComando();
        }

        public override void Excluir(Usuario usuario)
        {
            throw new NotImplementedException();
        }

        public override Usuario Consultar(Usuario usuario)
        {
            ComandoSql("[dbo].[cons_TBL_UsuarioPorCodigo]", CommandType.StoredProcedure);
            AdicionarParametroNulo("@CODIGO", usuario.Codigo);
            return MontarObjeto();
        }

        public Usuario ValidarAcesso(Usuario usuario)
        {
            ComandoSql("[dbo].[cons_TBL_UsuarioSenha]", CommandType.StoredProcedure);
            AdicionarParametro("@SENHA", usuario.Senha);
            AdicionarParametro("@LOGIN", usuario.Login);

            return MontarObjeto();
        }

        public override List<Usuario> Listar(Usuario usuario)
        {
            ComandoSql("[dbo].[cons_TBL_UsuarioPorCodigo]", CommandType.StoredProcedure);
            AdicionarParametroNulo("@CODIGO", usuario.Codigo);
            return MontarListagem();
        }

        protected override void PreencherObjeto(ref Usuario usuario, IDataReader reader)
        {
            #region Usuário

            if (reader["CODIGO_USUARIO"] != DBNull.Value)
            {
                usuario.Codigo = (decimal)reader["CODIGO_USUARIO"];
            }
            if (reader["LOGIN_USUARIO"] != DBNull.Value)
            {
                usuario.Login = reader["LOGIN_USUARIO"].ToString();
            }
            if (reader["NOME_USUARIO"] != DBNull.Value)
            {
                usuario.Nome = reader["NOME_USUARIO"].ToString();
            }
            if (reader["DATA_CRIACAO"] != DBNull.Value)
            {
                usuario.DataCriacao = (DateTime)reader["DATA_CRIACAO"];
            }
            if (reader["BLOQUEADO"] != DBNull.Value)
            {
                var bloqueado =  (int)reader["BLOQUEADO"];
                if(bloqueado == 0)
                {
                    usuario.Bloqueado = false;    
                }
                else
                {
                    usuario.Bloqueado = true;
                }
                
            }
            if (reader["TIPO_USUARIO"] != DBNull.Value)
            {
                usuario.Tipo = (int)reader["TIPO_USUARIO"];
            }

            if (reader["PAI"] != DBNull.Value)
            {
                usuario.Pai = reader["PAI"].ToString();
            }
            if (reader["MAE"] != DBNull.Value)
            {
                usuario.Mae = reader["MAE"].ToString();
            }
            if (reader["DATA_NASCIMENTO"] != DBNull.Value)
            {
                usuario.DataNascimento = (DateTime)reader["DATA_NASCIMENTO"];
            }

            if (reader["CONTATO_URGENTE"] != DBNull.Value)
            {
                usuario.ContatoUrgente = reader["CONTATO_URGENTE"].ToString();
            }
            if (reader["CPF"] != DBNull.Value)
            {
                usuario.Cpf = reader["CPF"].ToString();
            }
            if (reader["RG"] != DBNull.Value)
            {
                usuario.Rg = reader["RG"].ToString();
            }
            if (reader["ID_MAE"] != DBNull.Value)
            {
                usuario.CodigoMae =(decimal)reader["ID_MAE"];
            }
            if (reader["EMAIL"] != DBNull.Value)
            {
                usuario.Email = reader["EMAIL"].ToString();
            }
            #endregion

            #region Endereço Usuário

            if (reader["CODIGO_ENDERECO"] != DBNull.Value)
            {
                var endereco = new Endereco();
                endereco.Codigo = (decimal)reader["CODIGO_ENDERECO"];

                if (reader["TIPO_LOGRADOURO"] != DBNull.Value)
                {
                    endereco.TipoLogradouro = reader["TIPO_LOGRADOURO"].ToString();
                }
                if (reader["LOGRADOURO"] != DBNull.Value)
                {
                    endereco.Logradouro = reader["LOGRADOURO"].ToString();
                }
                if (reader["NUMERO"] != DBNull.Value)
                {
                    endereco.Numero = reader["NUMERO"].ToString();
                }
                if (reader["COMPLEMENTO"] != DBNull.Value)
                {
                    endereco.Complemento = reader["COMPLEMENTO"].ToString();
                }
                if (reader["BAIRRO"] != DBNull.Value)
                {
                    endereco.Bairro = reader["BAIRRO"].ToString();
                }
                if (reader["MUNICIPIO"] != DBNull.Value)
                {
                    endereco.Municipio = reader["MUNICIPIO"].ToString();
                }
                if (reader["UF"] != DBNull.Value)
                {
                    endereco.Uf = reader["UF"].ToString();
                }
                if (reader["TIPO_ENDERECO"] != DBNull.Value)
                {
                    endereco.TipoEndereco = (int)reader["TIPO_ENDERECO"];
                }
                if (reader["TELEFONE"] != DBNull.Value)
                {
                    endereco.Telefone = reader["TELEFONE"].ToString();
                }
                if (reader["CELULAR"] != DBNull.Value)
                {
                    endereco.Celular = reader["CELULAR"].ToString();
                }
                

                usuario.Endereco = endereco;
            }
            #endregion
        }

        private void MontarParametros(Usuario usuario)
        {
            if (usuario.Codigo > 0)
            {
                AdicionarParametro("@codigo", usuario.Codigo);
            }
            else
            {
                AdicionarParametro("@login", usuario.Login);
            }
            usuario.Bloqueado = true;
            
            AdicionarParametro("@senha", usuario.Senha);
            AdicionarParametro("@nome", usuario.Nome);
            AdicionarParametroNulo("@datacriacao", DateTime.Now);
            AdicionarParametroNulo("@bloqueado", usuario.Bloqueado);
            AdicionarParametroNulo("@tipo ", usuario.Tipo);
            AdicionarParametro("@pai", usuario.Pai);
            AdicionarParametro("@mae", usuario.Mae);
            AdicionarParametroNulo("@datanascimento", usuario.DataNascimento);
            AdicionarParametro("@contatourgente", usuario.ContatoUrgente);
            AdicionarParametro("@cpf", usuario.Cpf);
            AdicionarParametro("@rg", usuario.Rg);
            AdicionarParametroNulo("@id_mae", usuario.CodigoMae);
            AdicionarParametroNulo("@email", usuario.Email);
        }
    }
}
